Let’s Encrypt 即刻让你全站开启https
Let’s Encrypt is a free, automated, and open Certificate Authority.
继 Mozilla 做出对沃通WoSign的处罚决定之后,谷歌也跟随了这一做法,从 Chrome 56 开始,不再信任沃通及被其收购的 StartCom 于 2016 年 10 月 21 日之后所颁发的证书。
Let’s Encrypt成了我们最佳的选择。当然阿里云也能申请免费的证书,其有效期为一年。虽然Let’s Encrypt的证书只有三个月,但是这并不能阻挡我们喜欢它的接口,更何况我们也可以通过其他手段达到无限续命的方式。比如上、上、下、下、左、右、左、右、B、A、B、A,老子又有30条命了。什么鬼?
开始
Let’s Encrypt官方为我们提供了一个非常好用的工具—certbot。我们能够使用简单的几个命令就能成功的安装一个证书。
下载cerbot
我的服务器是CentOS 7.3 64位/1G RAM/1Mbps/1 core 想必大家已经猜到了,没错就是阿里云的新手免费6个月ECS,这真的不是一个广告,相信我。以下指令都会使用root权限,所以你懂的sudo。
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
安装证书
非常简单安装证书只需要一个命令
./certbot-auto certonly --email askCheng@163.com -d blog.well-known.me
有两个参数,不用解释了吧!一路确认就OK了。你可能会遇到两个问题。
问题一:
Creating virtual environment...
Installing Python packages...
你会卡在这里很久,没反应。原因是下载安装python遇到墙了。解决办法;
cd ~/.pip
vi pip.conf
//或者直接
vi ~/.pip/pip.conf
把内容修改成下面这样
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
在刚刚失败的地方接着往下走,接下来它会让你选择一种方式去验证当前服务器和你的证书的关系。其实就是验证证书的所属者。
-
standalone 方式: certbot 会自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先关掉它,以免冲突。
-
webroot 方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件, Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权
最后如果屏幕上出现了下面这句话,恭喜,表示你的证书已经签发成功了。并且告诉了我们证书的位置。
Congratulations, all renewals succeeded. The following certs have been renewed:/etc/letsencrypt/live/blog.well-known.me/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
问题二
如果你使用的是ubuntu16.4 LTS(ubuntu的其他版本不知道会不会存在,没试验过) 并且你和我一样是个穷逼,刚好RAM也是1G。那么你会收获一个异常:
很多人说是cetbot使用了系统自带的Python2.7,也有人说是1G内存不够,编译时报的错,我更倾向于后者。解决办法是挂载swap分区,至于如何挂载,这里就不多说。重点不是这个,你也可以google一下。
现在我们就去使用我们的证书。我是nginx,所以
server {
listen 443 ssl;
server_name blog.well-know.me;
ssl_certificate /etc/letsencrypt/live/blog.well-known.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.well-known.me/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/letsencrypt/live/blog.well-known.me/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9000;
}
重启Nginx服务
nginx -s reload
完事,整个过程完毕。如果你想让以前的http也自动重定向的使用https的话你可以这样配置
server {
listen 80;
server_name blog.well-known.me;
# 301 redirect: 301 代表永久性转移(Permanently Moved)。
return 301 https://$server_name$request_uri;
}
关于自动续命下次再说!!!